當我們要一次操作多個變數時,逐一宣告並使用會使程式碼顯得冗長,例如要計算多個變數的平方:
>>> a0 = 2
>>> a1 = 3
>>> a2 = 5
>>>
>>> a0 *= a0
>>> a1 *= a1
>>> a2 *= a2
>>>
>>> a0, a1, a2
(4, 9, 25)
在 Python 裡面可以將多個元素放在一個列表 (List) 裡面,結合 for 迴圈之類的來逐一操作,宣告的方式如下:
arr = [2, 3, 5]
用中括號 [] 將元素們夾起來,元素之間彼此用逗號 , 隔開,在這個列表裡面,分別有 2, 3, 5 這三個元素。列表可以直接用 print() 一次輸出:
>>> print(arr)
[2, 3, 5]
也可以用 for 迴圈把列表裡面的元素一個一個印出來:
>>> for a in arr:
>>>     print(a)
2
3
5
在 for 迴圈裡面,a 會逐一代表列表裡面的元素,這個逐一取出並使用的動作,被稱為迭代 (Iteration)。在迭代的過程,可以進行不同的操作:
>>> for a in arr:
>>>     print(a * a)
4
9
25
如果想要修改某個元素的內容,可以用像這樣指定索引值 (Index) 來修改:
>>> arr[0] = 7
>>> print(arr)
[7, 3, 5]
以整數列表而言,在迴圈中修改變數 a 並不會導致 arr 的內容改變:
>>> arr = [2, 3, 5]
>>> for a in arr:
>>>     a = a * a
>>>     print(a)
>>> print(arr)
4
9
25
[2, 3, 5]
雖然 a 依序被變成 4, 9, 25,但是 arr 的內容依然是 [2, 3, 5]。如果想要在迴圈裡面修改列表的值,有兩種方法,第一種是透過 range() 來列舉列表的索引值:
>>> arr = [2, 3, 4]
>>> for i in range(len(arr)):
>>>     arr[i] = arr[i] * arr[i]
>>>     print(arr[i])
>>> print(arr)
4
9
16
[4, 9, 16]
列表的索引值是從 0 開始算的,因此列表內的第一個元素是 arr[0],第二個元素是 arr[1]。而 len(arr) 可以取得 arr 的大小,在這裡 len(arr) 會是 3。因此 range(len(arr)) 會依序回傳 0, 1, 2,剛好可以對應到列表內每個元素的索引值。
第二種是搭配 enumerate() 函式來使用:
>>> arr = [2, 3, 4]
>>> for i, a in enumerate(arr):
>>>     arr[i] = a * a
>>>     print(arr[i])
>>> print(arr)
4
9
16
[4, 9, 16]
enumerate() 函式會回傳該元素的索引值以及元素本身,因此 a 的值一開始會是 arr[i] 的值,但是 a 與 arr[i] 依然是獨立的兩個變數,所以只修改 a 同樣不會影響 arr 的內容:
>>> arr = [2, 3, 4]
>>> for i, a in enumerate(arr):
>>>     a = a * a
>>>     print(arr[i], a)
>>> print(arr)
2 4
3 9
4 16
[2, 3, 4]
執行完這個迴圈後,arr 依然是原本的 [2, 3, 4]。
寫一個函式 sum_of_list() 傳入一個列表,計算這個列表的總和。
完整的程式碼放在此 Colab 裡面供各位參考。